package great.project.jpa.sign.table.domain.respository;

import great.project.jpa.sign.table.domain.entity.SysRole;
import great.project.jpa.sign.table.dto.RoleDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * @author v_zhangshun01
 */
@Repository
public interface SysRoleRepository extends BaseRepository<SysRole>{

    /**
     * 查询第一个数据 根据 id 查询 并且根据 id 排序
     * @param id id
     * @return 结果
     */
    SysRole findFirstByIdOrderById(String id);

    /** 根据创建人
     * @param createBy 创建人
     * @return 统计
     */
    Long countByCreateBy(String createBy);


    /**
     * 根据更新人查询 并且分页
     * @param pageable 分页
     * @param updateBy 更新人
     * @return  结果
     */
    @Query("SELECT r FROM SysRole r WHERE r.updateBy = ?1")
    Page<SysRole> findUpdateByPage(String updateBy , Pageable pageable);


    /**
     * NameQuery的方式查询
     * @param roleCode 角色 code
     * @return  结果
     */
    List<String> selectRoleNameForNamedQuery(String roleCode);

    /**
     * NameQuery的方式查询
     * @param roleCode 角色 code
     * @return  结果
     */
    List<SysRole> selectRoleForNamedQuery(String roleCode);

    /**
     * 结果映射
     * @param roleCode 角色 code
     * @return 结果
     */
    @Query(nativeQuery = true)
    List<RoleDto> selectRoleForNamedNativeQuery(String roleCode);

}
